package com.atwulidun.iterator15;

public class IteratorDemo {
    public static void main(String[] args) {
        // 创建一个聚合接口的具体实现类对象
        ConcretAggregate concretAggregate = new ConcretAggregate();
        // 向该对象所维护的数据结构中添加元素
        concretAggregate.add(1);
        concretAggregate.add(2);
        concretAggregate.add(3);
        concretAggregate.add(4);
        // 获取该对象的迭代器对象
        Iterator iterator = concretAggregate.createIterator();
        // 对该对象所维护的数据结构进行遍历
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        // 注意：一个迭代器对象只能用来遍历一次，再次进行遍历或者删除元素时需要再重新获取一个迭代器对象
        Iterator iterator1 = concretAggregate.createIterator();
        while (iterator1.hasNext()) {
            // 特别注意：这里犯了一个超级典型的错误！！！！！！连续调用了next()方法两次！！！！！！！
            // 正确的做法是：调用一次next()，将返回值用临时变量保存起来，再判断临时变量是不是等于2或者4
            int temp = (int) iterator1.next();
            if (temp == 2 || temp == 4) {
                iterator1.remove();
            }
        }
        // 再重新获得一个迭代器对象，对删除了两个元素后的数据结构进行遍历
        Iterator iterator2 = concretAggregate.createIterator();
        while (iterator2.hasNext()) {
            System.out.println(iterator2.next());
        }
    }
}
